package com.eian.boot.common.id.mapper;

import com.eian.boot.common.id.model.IdSegmentEntity;
import com.mybatisflex.core.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

/**
 * ID号段Mapper
 *
 * @author alex.meng
 */
public interface IdSegmentMapper extends BaseMapper<IdSegmentEntity> {

    /**
     * 更新最大ID（使用乐观锁）
     *
     * @param bizType 业务类型
     * @param step    步长
     * @param version 版本号
     * @return 影响行数
     */
    @Update("UPDATE id_segment SET max_id = max_id + #{step}, version = version + 1 WHERE biz_type = #{bizType} AND version = #{version}")
    int updateMaxId(@Param("bizType") String bizType, @Param("step") int step, @Param("version") int version);

    /**
     * 查询号段配置
     *
     * @param bizType 业务类型
     * @return 号段实体
     */
    @Select("SELECT biz_type, max_id, step, description, version, created_at, modified_at FROM id_segment WHERE biz_type = #{bizType}")
    IdSegmentEntity selectByBizType(@Param("bizType") String bizType);
}

